[Talend]tDieを利用してジョブにエラーを発生させる
はじめに
こんにちは。DI部の大高です。
今回はTalendのコンポーネント「tDie」を利用したジョブのエラー発生を紹介したいと思います。
前提条件
Talendのバージョンは「Talend Open Studio for Big Data」の「Version 7.1.1」で検証しています。
tDieについて
「tDie」を利用するとジョブに対してエラーを発生させることができます。また、これを「tLogCatcher」を利用してハンドリングすることができます。
「tDie」コンポーネントのTalend Helpページはこちらです。
なお「tLogCatcher」については、下記の記事でご紹介していますのでご参照ください。
[Talend]tLogCatcherを利用してジョブの例外をハンドリングする | DevelopersIO
では、具体的に以下で解説していきます。
ジョブの説明
「tDie」で意図的にエラーを発生させて「tLogCatcher」で「tDie」をハンドリングをし、「tLogRow」でエラー内容を出力しています。
「tDie」コンポーネントの設定
「tDie」コンポーネントでは、「警告メッセージ」、「コード」、「優先度」の3つを設定して警告を発生させています。今回はすべてデフォルトの値のままにしています。
停止メッセージ
「tLogCatcher」におけるmessage
カラムに渡されるメッセージの値になります。
エラーコード
「tLogCatcher」におけるcode
カラムに渡されるコードの値になります。
優先度
「tLogCatcher」におけるpriority
カラムに渡される優先度の値になります。なお、優先度と値の関係は以下の通りです。
優先度 | 値 |
---|---|
トレース | 1 |
デバッグ | 2 |
情報 | 3 |
警告 | 4 |
エラー | 5 |
致命的 | 6 |
JVMをすぐに終了
「詳細設定」にあるオプションです。
2019/01/16 現在、ヘルプには詳細内容が見受けられなかったのですが「有効」、「無効」にすると生成されるJavaコードに以下の違いがありました。
System.exit(4);
if (true) { throw new TDieException(); }
「tLogCatcher」コンポーネントの設定
「tLogCatcher」は以下のように設定し「tDie」をハンドリングするように設定しました。
こちらのコンポーネントの詳細については以下の記事もご参照ください。
[Talend]tLogCatcherを利用してジョブの例外をハンドリングする | DevelopersIO
「tLogRow」コンポーネントの設定
「tLogRow」コンポーネントでは、結果が見やすいように「モード」を「縦に表示」に設定しました。
実行結果
設定は以上です。実際にこのジョブを実行すると以下のように出力されます。
[statistics] connecting to socket on port 3446 [statistics] connected the end is near .----------------------------------. | #1. tLogRow_1 | +------------+---------------------+ | key | value | +------------+---------------------+ | moment | 2019-01-16 10:52:26 | | pid | KWGDSO | | root_pid | KWGDSO | | father_pid | KWGDSO | | project | SANDBOX | | job | tDie | | context | Default | | priority | 5 | | type | tDie | | origin | tDie_1 | | message | the end is near | | code | 4 | +------------+---------------------+ [statistics] disconnected
「tDie」コンポーネントでエラーメッセージthe end is near
が表示され、その後に「tLogRow」でエラー内容が表示されています。なお、3行目のthe end is near
はSystem.err.println("the end is near");
で出力されるため、標準だと赤字で表示されます。
まとめ
以上、「tDie」コンポーネントの紹介でした。
ジョブを実行する場合に「業務エラーとしてジョブを意図的に停止させたい」というケースなどに利用できるコンポーネントだと思います。
それでは!